import Object.BaiduPic;
import Object.Constant;
import Object.MyRunnable;
import Object.Pic;
import Util.HttpUtil;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author jklu
 * Baidu爬虫的相关函数
 */
public class BaiduSpider {

    private ExecutorService executor;

    /**
     * 基于API，设置每一页的请求链接
     *
     * @param word  搜索关键字
     * @param begin 页的起始地址
     * @param count 一页包含的图片数量
     * @param color 颜色筛选
     * @return 每一页的请求链接
     */
    private String setUrl(String word, int begin, int count, int color) {
        return setUrl(word, begin, count, color, 1920, 1080);
    }

    /**
     * 基于API，设置每一页的请求链接
     *
     * @param word  搜索关键字
     * @param begin 页的起始地址
     * @param count 一页包含的图片数量
     * @param color 颜色筛选
     * @param width  宽度
     * @param height 高度
     * @return 每一页的请求链接
     */
    private String setUrl(String word, int begin, int count, int color, int width, int height) {
        String result = Constant.API_BAIDU;
        result = result.replace("{word}", word);
        result = result.replace("{begin}", String.valueOf(begin));
        result = result.replace("{count}", String.valueOf(count));
        result = result.replace("{color}", String.valueOf(color));
        result = result.replace("{width}", String.valueOf(width));
        result = result.replace("{height}", String.valueOf(height));
        System.out.println(result);
        return result;
    }

    /**
     * 用户使用
     * 获取一页数据的对象，即一个BaiduPic对象
     *
     * @param word  搜索关键字
     * @param begin 页的起始地址，用于图片序号的设置
     * @param count 一页包含的图片数量
     * @param color 颜色筛选
     * @return 一个BaiduPic对象，包含一页中所有图片对象的集合
     */
    protected BaiduPic getBaiduPic(String word, int begin, int count, int color) {
        String url = setUrl(word, begin, count, color);
        return new BaiduPic(HttpUtil.getDocument(url, false), begin);
    }

    /**
     * 用户使用
     * 获取一页数据的对象，即一个BaiduPic对象
     *
     * @param word   搜索关键字
     * @param begin  页的起始地址，用于图片序号的设置
     * @param count  一页包含的图片数量
     * @param color  颜色筛选
     * @param width  宽度
     * @param height 高度
     * @return 一个BaiduPic对象，包含一页中所有图片对象的集合
     */
    protected BaiduPic getBaiduPic(String word, int begin, int count, int color, int width, int height) {
        String url = setUrl(word, begin, count, color, width, height);
        return new BaiduPic(HttpUtil.getDocument(url, false), begin);
    }

    /**
     * 用户使用
     * 下载一个BaiduPic对象中所有Pic对象
     *
     * @param pic 要下载的BaiduPic对象
     */
    protected void downloadBaiduPic(BaiduPic pic) {
        executor = Executors.newCachedThreadPool();
        for (Pic p : pic.getPicList()) {
            executor.execute(new MyRunnable(p, 1, false));
        }
    }
}
